/*
 * File:   newsimpletest.c
 * Author: max
 *
 * Created on Sep 16, 2012, 9:17:54 PM
 */

#include <stdio.h>
#include <stdlib.h>

#include "../Clock.h"
#include "../Trabajo.h"
#include "../Procesador.h"

/*
 * Simple C Test Suite
 */
static void imprimirTrabajo (tTrabajo pTrabajo);

void test1();
void test2();


int main(int argc, char** argv) {
    printf("%%SUITE_STARTING%% newsimpletest\n");
    printf("%%SUITE_STARTED%%\n");

    printf("%%TEST_STARTED%% test1 (newsimpletest)\n");
    test1();
    printf("%%TEST_FINISHED%% time=0 test1 (newsimpletest) \n");
/*
    printf("%%TEST_STARTED%% test2 (newsimpletest)\n");
    test2();
    printf("%%TEST_FINISHED%% time=0 test2 (newsimpletest) \n");
*/
    printf("%%SUITE_FINISHED%% time=0\n");

    return (EXIT_SUCCESS);
}


void test1() {
    printf("newsimpletest test 1\n");
  tClock clock;
  tProcesador procesadorA, procesadorB;
  tTrabajo trabajoA, trabajoB;
  
  clockCrear(&clock);
  
  
  trabajoCrear(&trabajoA, 2, 3, 1024, "Trabajo A", 5000);
  procesadorCrear (&procesadorA);
  procesadorSetTrabajo(procesadorA, trabajoA);
  clockSuscribir(clock, procesadorA, procesadorEventoNotificacionClock);
  
  trabajoCrear(&trabajoB, 2, 3, 1024, "Trabajo B", 4000);
  procesadorCrear (&procesadorB);
  procesadorSetTrabajo(procesadorB, trabajoB);
  clockSuscribir(clock, procesadorB, procesadorEventoNotificacionClock);
  
  
  clockCorrer(clock, 10);
  imprimirTrabajo(trabajoA);
  imprimirTrabajo(trabajoB);
  
  clockCorrer(clock, 10);
  imprimirTrabajo(trabajoA);
  imprimirTrabajo(trabajoB);
  
  clockCorrer(clock, 10);
  imprimirTrabajo(trabajoA);
  imprimirTrabajo(trabajoB);
  
  clockCancelarSuscripciones (clock);
  clockDestruir(clock);
  
  procesadorDestruir(procesadorA);
  procesadorDestruir(procesadorB); 
    
}

void test2() {
    printf("newsimpletest test 2\n");
    printf("%%TEST_FAILED%% time=0 testname=test2 (newsimpletest) message=error message sample\n");
}

void imprimirTrabajo (tTrabajo pTrabajo) {
    if (pTrabajo)
    {
        printf("\n[Path: %s][Potencia Proceso: %d][Prioridad: %d][Memora Requerida: %d][Tiempo Ejecucion: %d]"
            ,trabajoGetPathEjecutable(pTrabajo)
            ,trabajoGetPotenciaProceso(pTrabajo)
            ,trabajoGetPrioridad(pTrabajo)            
            ,trabajoGetRequerimientoMemoria(pTrabajo)
            ,trabajoGetTiempoEjecucion(pTrabajo)
        );
    }
}